// axois的二次封装，也即是重写里面的方法罢了
import axios from 'axios'

import nprogress from 'nprogress'
import 'nprogress/nprogress.css'

const requests = axios.create({
   // 以后任何的请求都会在前面自动加上api，放在前面的叫base
   baseURL:'/mock',
   // 请求超时时间，超过5s就会停止请求 
   timeout:5000
})

/**
 * 请求拦截器，请求数据之前处理一些业务
 * use指的是使用哪个请求拦截器，通过后面的回调函数来配置
 * 由于配置项多，所以封装到一个config里面，这也是为什么要用回调函数吧
 * */ 
requests.interceptors.request.use((config)=>{
    
    // 进度条开始
    nprogress.start()
    // 这个config包含请求头Header
    return config;
})

// 响应拦截器，一般服务器端都是由两个回调函数的，成功与失败的回调来返回给客户端
requests.interceptors.response.use((res)=>{
    
  // 进度条结束
  nprogress.done()
  return res.data;
},()=>{
  return Promise.reject(new Error('响应拦截器错误'))
})

// 重新封装好了再次暴露
export default requests;